{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "a5ac5efe",
   "metadata": {},
   "outputs": [],
   "source": [
    "# importing libaries\n",
    "\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import scipy.io"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "5168007c",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Load the .mat file\n",
    "v_data = scipy.io.loadmat('v.mat')\n",
    "h_data = scipy.io.loadmat('h.mat')\n",
    "x_data = scipy.io.loadmat('x.mat')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "90a6aa84",
   "metadata": {},
   "outputs": [],
   "source": [
    "mat_data = scipy.io.loadmat('NLS.mat')\n",
    "\n",
    "# Following is the code to plot the data u vs x and t. u is 256*100\n",
    "# matrix. Use first 75 columns for training and 25 for testing :)\n",
    "\n",
    "# Access the variables stored in the .mat file\n",
    "# The variable names in the .mat file become keys in the loaded dictionary\n",
    "x = mat_data['x']\n",
    "t = mat_data['tt']\n",
    "h = h_data['h']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "a353ca57",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(201, 256)"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "h.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "53e88033",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x360 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import torch\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib.ticker import FixedLocator\n",
    "\n",
    "# Assuming you have defined concatenated_tensor as a PyTorch tensor\n",
    "# concatenated_tensor = torch.cat((tensor1, tensor2), dim=0)\n",
    "\n",
    "# Convert concatenated_tensor to a NumPy array\n",
    "concatenated_array = h\n",
    "\n",
    "# Define custom color levels\n",
    "X, T = np.meshgrid(x, t)\n",
    "\n",
    "# Define custom color levels using the minimum and maximum from the NumPy array\n",
    "c_levels = np.linspace(np.min(concatenated_array), np.max(concatenated_array), 100)\n",
    "\n",
    "# Plot the contour\n",
    "plt.figure(figsize=(15, 5))\n",
    "CS1 = plt.contourf(T, X, concatenated_array, levels=c_levels, cmap='coolwarm')\n",
    "\n",
    "# Create a custom font with Times New Roman\n",
    "plt.rcParams['figure.figsize'] = [10, 4]\n",
    "\n",
    "from matplotlib.font_manager import FontProperties\n",
    "plt.rcParams['axes.unicode_minus'] = False\n",
    "font_path = 'times-new-roman.ttf'\n",
    "custom_font = FontProperties(fname=font_path)\n",
    "\n",
    "cbar1 = plt.colorbar(CS1)\n",
    "# Set the number of ticks for the color bar with uniformly distributed numbers\n",
    "num_ticks = 5\n",
    "c_ticks = np.linspace(np.min(concatenated_array), np.max(concatenated_array), num_ticks)\n",
    "cbar1.set_ticks(c_ticks)\n",
    "\n",
    "for t in cbar1.ax.get_yticklabels():\n",
    "    t.set_fontproperties(custom_font)\n",
    "    t.set_fontsize(20)\n",
    "\n",
    "plt.xlabel('$t$', fontsize=20, fontproperties=custom_font)\n",
    "plt.ylabel('$x$', fontsize=20, fontproperties=custom_font)\n",
    "plt.title('$|u(x, t)|$', fontsize=20, fontproperties=custom_font)\n",
    "plt.xticks(fontsize=20, fontproperties=custom_font)\n",
    "plt.yticks(fontsize=20, fontproperties=custom_font)\n",
    "\n",
    "# Add a dotted line at t = 0.8\n",
    "#plt.axvline(x=0.8, color='black', linestyle='dotted')\n",
    "\n",
    "# Set the number of ticks for x-axis and y-axis to 5\n",
    "num_ticks = 5\n",
    "x_ticks = np.linspace(np.min(T), np.max(T), num_ticks)\n",
    "y_ticks = np.linspace(np.min(X), np.max(X), num_ticks)\n",
    "\n",
    "plt.gca().xaxis.set_major_locator(FixedLocator(x_ticks))\n",
    "plt.gca().yaxis.set_major_locator(FixedLocator(y_ticks))\n",
    "cbar1.locator = FixedLocator(c_ticks)\n",
    "\n",
    "plt.savefig('PINN_Sch.pdf', dpi=300)\n",
    "plt.savefig('PINN_sch.png', dpi=300)\n",
    "# Show the plot\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "878490fb",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "pytorch",
   "language": "python",
   "name": "pytorch"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
